X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=bfd%2Felf32-am33lin.c;h=305938d97d9228874b81c2c43b6a4ad9e42f2637;hb=aec72fda3b320c36eb99fc1c4cf95b10fc026729;hp=7fb8c93099df34c209f730834cd6f4f2f795d564;hpb=53e09e0aaf3d13e4b893744e2fe79edde7edfd20;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/elf32-am33lin.c b/bfd/elf32-am33lin.c index 7fb8c93099..305938d97d 100644 --- a/bfd/elf32-am33lin.c +++ b/bfd/elf32-am33lin.c @@ -1,12 +1,11 @@ /* Matsushita AM33/2.0 support for 32-bit GNU/Linux ELF - Copyright 2003 - Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -16,11 +15,17 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02110-1301, USA. */ + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "sysdep.h" +#include "bfd.h" +#include "elf-bfd.h" +#include "elf/mn10300.h" #define elf_symbol_leading_char 0 -#define TARGET_LITTLE_SYM bfd_elf32_am33lin_vec +#define TARGET_LITTLE_SYM am33_elf32_linux_vec #define TARGET_LITTLE_NAME "elf32-am33lin" #define ELF_ARCH bfd_arch_mn10300 #define ELF_MACHINE_CODE EM_MN10300 @@ -28,8 +33,75 @@ #define ELF_MAXPAGESIZE 0x1000 /* Rename global functions. */ -#define _bfd_mn10300_elf_merge_private_bfd_data _bfd_am33_elf_merge_private_bfd_data -#define _bfd_mn10300_elf_object_p _bfd_am33_elf_object_p -#define _bfd_mn10300_elf_final_write_processing _bfd_am33_elf_final_write_processing +#define _bfd_mn10300_elf_merge_private_bfd_data _bfd_am33_elf_merge_private_bfd_data +#define _bfd_mn10300_elf_object_p _bfd_am33_elf_object_p +#define _bfd_mn10300_elf_final_write_processing _bfd_am33_elf_final_write_processing + +/* Support for core dump NOTE sections. */ +static bfd_boolean +elf32_am33lin_grok_prstatus (bfd *abfd, Elf_Internal_Note *note) +{ + int offset; + unsigned int size; + + switch (note->descsz) + { + default: + return FALSE; + + case 184: + case 188: /* Linux/am33 */ + /* pr_cursig */ + elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12); + + /* pr_pid */ + elf_tdata (abfd)->core->lwpid = bfd_get_32 (abfd, note->descdata + 24); + + /* pr_reg */ + offset = 72; + size = 112; + + break; + } + + /* Make a ".reg/999" section. */ + return _bfd_elfcore_make_pseudosection (abfd, ".reg", size, + note->descpos + offset); +} + +static bfd_boolean +elf32_am33lin_grok_psinfo (bfd *abfd, Elf_Internal_Note *note) +{ + switch (note->descsz) + { + default: + return FALSE; + + case 124: /* Linux/am33 elf_prpsinfo */ + elf_tdata (abfd)->core->program + = _bfd_elfcore_strndup (abfd, note->descdata + 28, 16); + elf_tdata (abfd)->core->command + = _bfd_elfcore_strndup (abfd, note->descdata + 44, 80); + } + + /* Note that for some reason, a spurious space is tacked + onto the end of the args in some (at least one anyway) + implementations, so strip it off if it exists. */ + + { + char *command = elf_tdata (abfd)->core->command; + int n = strlen (command); + + if (0 < n && command[n - 1] == ' ') + command[n - 1] = '\0'; + } + + return TRUE; +} + +#define elf_backend_grok_prstatus elf32_am33lin_grok_prstatus +#define elf_backend_grok_psinfo elf32_am33lin_grok_psinfo + +#define elf_backend_linux_prpsinfo32_ugid16 TRUE #include "elf-m10300.c"