diff options
Diffstat (limited to 'gdb/solib-svr4.c')
-rw-r--r-- | gdb/solib-svr4.c | 48 |
1 files changed, 29 insertions, 19 deletions
diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c index 6c4c10a..3658be6 100644 --- a/gdb/solib-svr4.c +++ b/gdb/solib-svr4.c @@ -105,14 +105,16 @@ static char *main_name_list[] = NULL }; -/* Macro to extract an address from a solib structure. - When GDB is configured for some 32-bit targets (e.g. Solaris 2.7 - sparc), BFD is configured to handle 64-bit targets, so CORE_ADDR is - 64 bits. We have to extract only the significant bits of addresses - to get the right address when accessing the core file BFD. */ +/* Macro to extract an address from a solib structure. When GDB is + configured for some 32-bit targets (e.g. Solaris 2.7 sparc), BFD is + configured to handle 64-bit targets, so CORE_ADDR is 64 bits. We + have to extract only the significant bits of addresses to get the + right address when accessing the core file BFD. + + Assume that the address is unsigned. */ #define SOLIB_EXTRACT_ADDRESS(MEMBER) \ - extract_address (&(MEMBER), sizeof (MEMBER)) + extract_unsigned_integer (&(MEMBER), sizeof (MEMBER)) /* local data declarations */ @@ -132,7 +134,9 @@ LM_NEXT (struct so_list *so) { struct link_map_offsets *lmo = SVR4_FETCH_LINK_MAP_OFFSETS (); - return extract_address (so->lm_info->lm + lmo->l_next_offset, lmo->l_next_size); + /* Assume that the address is unsigned. */ + return extract_unsigned_integer (so->lm_info->lm + lmo->l_next_offset, + lmo->l_next_size); } static CORE_ADDR @@ -140,7 +144,9 @@ LM_NAME (struct so_list *so) { struct link_map_offsets *lmo = SVR4_FETCH_LINK_MAP_OFFSETS (); - return extract_address (so->lm_info->lm + lmo->l_name_offset, lmo->l_name_size); + /* Assume that the address is unsigned. */ + return extract_unsigned_integer (so->lm_info->lm + lmo->l_name_offset, + lmo->l_name_size); } static int @@ -148,8 +154,9 @@ IGNORE_FIRST_LINK_MAP_ENTRY (struct so_list *so) { struct link_map_offsets *lmo = SVR4_FETCH_LINK_MAP_OFFSETS (); - return extract_address (so->lm_info->lm + lmo->l_prev_offset, - lmo->l_prev_size) == 0; + /* Assume that the address is unsigned. */ + return extract_unsigned_integer (so->lm_info->lm + lmo->l_prev_offset, + lmo->l_prev_size) == 0; } static CORE_ADDR debug_base; /* Base of dynamic linker structures */ @@ -587,7 +594,8 @@ first_link_map_member (void) read_memory (debug_base + lmo->r_map_offset, r_map_buf, lmo->r_map_size); - lm = extract_address (r_map_buf, lmo->r_map_size); + /* Assume that the address is unsigned. */ + lm = extract_unsigned_integer (r_map_buf, lmo->r_map_size); /* FIXME: Perhaps we should validate the info somehow, perhaps by checking r_version for a known version number, or r_state for @@ -645,8 +653,9 @@ open_symbol_file_object (void *from_ttyp) /* Read address of name from target memory to GDB. */ read_memory (lm + lmo->l_name_offset, l_name_buf, lmo->l_name_size); - /* Convert the address to host format. */ - l_name = extract_address (l_name_buf, lmo->l_name_size); + /* Convert the address to host format. Assume that the address is + unsigned. */ + l_name = extract_unsigned_integer (l_name_buf, lmo->l_name_size); /* Free l_name_buf. */ do_cleanups (cleanups); @@ -820,9 +829,9 @@ svr4_fetch_objfile_link_map (struct objfile *objfile) /* Read address of name from target memory to GDB. */ read_memory (lm + lmo->l_name_offset, l_name_buf, lmo->l_name_size); - /* Extract this object's name. */ - name_address = extract_address (l_name_buf, - lmo->l_name_size); + /* Extract this object's name. Assume that the address is + unsigned. */ + name_address = extract_unsigned_integer (l_name_buf, lmo->l_name_size); target_read_string (name_address, &buffer, SO_NAME_MAX_PATH_SIZE - 1, &errcode); make_cleanup (xfree, buffer); @@ -843,9 +852,10 @@ svr4_fetch_objfile_link_map (struct objfile *objfile) return lm; } } - /* Not the file we wanted, continue checking. */ - lm = extract_address (objfile_lm_info.lm + lmo->l_next_offset, - lmo->l_next_size); + /* Not the file we wanted, continue checking. Assume that the + address is unsigned. */ + lm = extract_unsigned_integer (objfile_lm_info.lm + lmo->l_next_offset, + lmo->l_next_size); do_cleanups (old_chain); } return 0; |