Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions sys/src/ape/cmd/dw2elf/dw2elf.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
#include <sys/stat.h>

#include <libdwarf.h>
#include <dwarf.h>
#include <libdwarfp.h>

/* ── Plan9 a.out constants (amd64 fat header) ─────────────────────────── */
Expand Down Expand Up @@ -272,6 +273,7 @@ static void emit_sidecar(Dwarf_P_Debug dbg, const char *srcname,
const uint8_t *buf, size_t len)
{
Dwarf_P_Die cu_die, func_die, param_die;
Dwarf_P_Attribute attr_out;
Dwarf_Error err;
uint32_t nparams, nlocals, i, j;
char *fname, *pname;
Expand All @@ -283,7 +285,7 @@ static void emit_sidecar(Dwarf_P_Debug dbg, const char *srcname,
if(dwarf_new_die_a(dbg, DW_TAG_compile_unit,
NULL, NULL, NULL, NULL, &cu_die, &err) != DW_DLV_OK)
return;
dwarf_add_AT_name_a(cu_die, (char *)srcname, &err);
dwarf_add_AT_name_a(cu_die, (char *)srcname, &attr_out, &err);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The return value of dwarf_add_AT_name_a is not checked. If this call fails, the compilation unit DIE will be created without a name, and the error state in err might be lost or cause issues in subsequent calls. It is recommended to check the return value for DW_DLV_OK, consistent with the error handling for dwarf_new_die_a and dwarf_add_die_to_debug_a.

	if(dwarf_add_AT_name_a(cu_die, (char *)srcname, &attr_out, &err) != DW_DLV_OK)
		return;

if(dwarf_add_die_to_debug_a(dbg, cu_die, &err) != DW_DLV_OK)
return;

Expand All @@ -296,7 +298,7 @@ static void emit_sidecar(Dwarf_P_Debug dbg, const char *srcname,
if(dwarf_new_die_a(dbg, DW_TAG_subprogram,
cu_die, NULL, NULL, NULL,
&func_die, &err) == DW_DLV_OK)
dwarf_add_AT_name_a(func_die, fname, &err);
dwarf_add_AT_name_a(func_die, fname, &attr_out, &err);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The return value of dwarf_add_AT_name_a is ignored here. If adding the function name fails, the subprogram DIE will be incomplete. Consider adding a check to handle potential errors, similar to the check for dwarf_new_die_a.


for(i = 0; i < nparams; i++) {
pname = sc_str();
Expand All @@ -305,7 +307,7 @@ static void emit_sidecar(Dwarf_P_Debug dbg, const char *srcname,
if(dwarf_new_die_a(dbg, DW_TAG_formal_parameter,
func_die, NULL, NULL, NULL,
&param_die, &err) == DW_DLV_OK)
dwarf_add_AT_name_a(param_die, pname, &err);
dwarf_add_AT_name_a(param_die, pname, &attr_out, &err);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The return value of dwarf_add_AT_name_a is ignored for formal parameters. Checking the return value ensures that the parameter names are correctly added to the DWARF information.

}
free(pname);
}
Expand Down
Loading