[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 3/9] livepatch-build: fix detection of structure sizes
The current runes assume that in the list of DWARF tags DW_AT_byte_size will come after DW_AT_name, but that's not always the case. On one of my builds I've seen: <b618> DW_AT_name : (indirect string, offset: 0x3c45): exception_table_entry <b61c> DW_AT_declaration : 1 <1><b61c>: Abbrev Number: 5 (DW_TAG_const_type) <b61d> DW_AT_type : <0xb617> <1><b621>: Abbrev Number: 14 (DW_TAG_pointer_type) <b622> DW_AT_byte_size : 8 Instead of assuming such order, explicitly search for the DW_AT_byte_size tag when a match in the DW_AT_name one is found. Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> --- All this ad hoc parsing of DWARF data seems very fragile. This is an improvement over the current logic, but I would still prefer if we could find a more reliable way to obtain the struct sizes we need. --- livepatch-build | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/livepatch-build b/livepatch-build index f3ca9399d149..aad9849f2ba9 100755 --- a/livepatch-build +++ b/livepatch-build @@ -427,9 +427,16 @@ if [ "${SKIP}" != "build" ]; then SPECIAL_VARS=$(readelf -wi "$OUTPUT/xen-syms" | awk ' BEGIN { a = b = e = 0 } + # Ensure no fall through to the next tag without getting the size + (a == 1 || b == 1 || e == 1) && /DW_AT_name/ \ + {print "can not get special structure size" > "/dev/stderr"; exit 1} a == 0 && /DW_AT_name.* alt_instr/ {a = 1; next} b == 0 && /DW_AT_name.* bug_frame/ {b = 1; next} e == 0 && /DW_AT_name.* exception_table_entry/ {e = 1; next} + # Seek the line that contains the size + a == 1 && !/DW_AT_byte_size/ {next} + b == 1 && !/DW_AT_byte_size/ {next} + e == 1 && !/DW_AT_byte_size/ {next} # Use shell printf to (possibly) convert from hex to decimal a == 1 {printf("export ALT_STRUCT_SIZE=`printf \"%%d\" \"%s\"`\n", $4); a = 2} b == 1 {printf("export BUG_STRUCT_SIZE=`printf \"%%d\" \"%s\"`\n", $4); b = 2} -- 2.44.0
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |