diff options
Diffstat (limited to 'binutils-2.25/bfd/elf32-am33lin.c')
-rw-r--r-- | binutils-2.25/bfd/elf32-am33lin.c | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/binutils-2.25/bfd/elf32-am33lin.c b/binutils-2.25/bfd/elf32-am33lin.c new file mode 100644 index 00000000..f23ef8ee --- /dev/null +++ b/binutils-2.25/bfd/elf32-am33lin.c @@ -0,0 +1,106 @@ +/* Matsushita AM33/2.0 support for 32-bit GNU/Linux ELF + Copyright 2003, 2005, 2007 + 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 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + 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., 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_NAME "elf32-am33lin" +#define ELF_ARCH bfd_arch_mn10300 +#define ELF_MACHINE_CODE EM_MN10300 +#define ELF_MACHINE_ALT1 EM_CYGNUS_MN10300 +#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 + +/* 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 + +#include "elf-m10300.c" |