bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH gnumach] Remove a.out support for ddb


From: Flavio Cruz
Subject: [PATCH gnumach] Remove a.out support for ddb
Date: Thu, 9 Feb 2023 02:28:49 -0500

We haven't built gnumach using a.out for a very long time.

---
 Makefrag.am             |   2 -
 ddb/db_aout.c           | 505 ----------------------------------------
 ddb/db_aout.h           |  52 -----
 ddb/db_sym.c            |   8 +-
 ddb/db_sym.h            |   8 +-
 i386/i386at/model_dep.c |  27 ---
 6 files changed, 2 insertions(+), 600 deletions(-)
 delete mode 100644 ddb/db_aout.c
 delete mode 100644 ddb/db_aout.h

diff --git a/Makefrag.am b/Makefrag.am
index 128f7911..9ad3c27a 100644
--- a/Makefrag.am
+++ b/Makefrag.am
@@ -23,8 +23,6 @@ if enable_kdb
 libkernel_a_SOURCES += \
        ddb/db_access.c \
        ddb/db_access.h \
-       ddb/db_aout.c \
-       ddb/db_aout.h \
        ddb/db_elf.c \
        ddb/db_elf.h \
        ddb/db_break.c \
diff --git a/ddb/db_aout.c b/ddb/db_aout.c
deleted file mode 100644
index 7b769c1c..00000000
--- a/ddb/db_aout.c
+++ /dev/null
@@ -1,505 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1991,1990 Carnegie Mellon University
- * All Rights Reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- */
-/*
- *     Author: David B. Golub, Carnegie Mellon University
- *     Date:   7/90
- */
-
-#if MACH_KDB
-
-/*
- * Symbol table routines for a.out format files.
- */
-
-#include <string.h>
-#include <mach/std_types.h>
-#include <machine/db_machdep.h>                /* data types */
-#include <ddb/db_output.h>
-#include <ddb/db_sym.h>
-#include <ddb/db_aout.h>
-
-#ifndef        DB_NO_AOUT
-
-#include <ddb/nlist.h>                 /* a.out symbol table */
-#include <ddb/stab.h>
-
-#define private static
-
-/*
- * An a.out symbol table as loaded into the kernel debugger:
- *
- * symtab      -> size of symbol entries, in bytes
- * sp          -> first symbol entry
- *                ...
- * ep          -> last symbol entry + 1
- * strtab      == start of string table
- *                size of string table in bytes,
- *                including this word
- *             -> strings
- */
-
-/*
- * Find pointers to the start and end of the symbol entries,
- * given a pointer to the start of the symbol table.
- */
-#define        db_get_aout_symtab(symtab, sp, ep) \
-       (sp = (struct nlist *)((vm_offset_t *)(symtab) + 1), \
-        ep = (struct nlist *)((char *)sp + *((int*)symtab)))
-
-boolean_t
-aout_db_sym_init(
-       char *  symtab,         /* pointer to start of symbol table */
-       char *  esymtab,        /* pointer to end of string table,
-                                  for checking - may be rounded up to
-                                  integer boundary */
-       const char *    name,
-       char *  task_addr)      /* use for this task only */
-{
-       struct nlist    *sym_start, *sym_end;
-       struct nlist    *sp;
-       char *          strtab;
-       int             strlen;
-       char *          estrtab;
-
-       db_get_aout_symtab(symtab, sym_start, sym_end);
-
-       strtab = (char *)sym_end;
-       strlen = *(int *)strtab;
-       estrtab = strtab + strlen;
-
-#define        round_to_size(x) \
-       (((vm_offset_t)(x) + sizeof(vm_size_t) - 1) & ~(sizeof(vm_size_t) - 1))
-
-       if (round_to_size(estrtab) != round_to_size(esymtab)) {
-           db_printf("[ %s symbol table not valid ]\n", name);
-           return (FALSE);
-       }
-
-#undef round_to_size
-
-       for (sp = sym_start; sp < sym_end; sp++) {
-           long strx;
-           strx = sp->n_un.n_strx;
-           if (strx != 0) {
-               if (strx > strlen) {
-                   db_printf("Bad string table index (%#x)\n", strx);
-                   sp->n_un.n_name = 0;
-                   continue;
-               }
-               sp->n_un.n_name = strtab + strx;
-           }
-       }
-
-       if (db_add_symbol_table(SYMTAB_AOUT,
-                               (char *)sym_start,
-                               (char *)sym_end,
-                               name,
-                               symtab,
-                               task_addr))
-       {
-           /* Successfully added symbol table */
-           db_printf("[ preserving %d bytes of %s symbol table ]\n",
-               esymtab - (char *)symtab, name);
-           return TRUE;
-       }
-       else
-           return FALSE;
-}
-
-/*
- * check file name or not (check xxxx.x pattern)
- */
-private boolean_t __attribute__ ((pure))
-aout_db_is_filename(const char *name)
-{
-       while (*name) {
-           if (*name == '.') {
-               if (name[1])
-                   return(TRUE);
-           }
-           name++;
-       }
-       return(FALSE);
-}
-
-/*
- * special name comparison routine with a name in the symbol table entry
- */
-private boolean_t __attribute__ ((pure))
-aout_db_eq_name(const struct nlist *sp, const char * name)
-{
-       const char *s1, *s2;
-
-       s1 = sp->n_un.n_name;
-       s2 = name;
-       if (*s1 == '_' && *s2 && *s2 != '_')
-           s1++;
-       while (*s2) {
-           if (*s1++ != *s2++) {
-               /*
-                * check .c .o file name comparison case
-                */
-               if (*s2 == 0 && sp->n_un.n_name <= s1 - 2
-                       && s1[-2] == '.' && s1[-1] == 'o')
-                   return(TRUE);
-               return(FALSE);
-           }
-       }
-       /*
-        * do special check for
-        *     xxx:yyy for N_FUN
-        *     xxx.ttt for N_DATA and N_BSS
-        */
-       return(*s1 == 0 || (*s1 == ':' && sp->n_type == N_FUN) ||
-               (*s1 == '.' && (sp->n_type == N_DATA || sp->n_type == N_BSS)));
-}
-
-/*
- * search a symbol table with name and type
- *     fp(in,out): last found text file name symbol entry
- */
-private struct nlist *
-aout_db_search_name(
-       struct nlist            *sp,
-       const struct nlist      *ep,
-       const char              *name,
-       int                     type,
-       struct nlist            **fp)
-{
-       struct nlist    *file_sp = *fp;
-       struct nlist    *found_sp = 0;
-
-       for ( ; sp < ep; sp++) {
-           if (sp->n_type == N_TEXT && aout_db_is_filename(sp->n_un.n_name))
-               *fp = sp;
-           if (type) {
-               if (sp->n_type == type) {
-                   if (aout_db_eq_name(sp, name))
-                       return(sp);
-               }
-               if (sp->n_type == N_SO)
-                   *fp = sp;
-               continue;
-           }
-           if (sp->n_type & N_STAB)
-               continue;
-           if (sp->n_un.n_name && aout_db_eq_name(sp, name)) {
-               /*
-                * In case of qaulified search by a file,
-                * return it immediately with some check.
-                * Otherwise, search external one
-                */
-               if (file_sp) {
-                   if ((file_sp == *fp) || (sp->n_type & N_EXT))
-                       return(sp);
-               } else if (sp->n_type & N_EXT)
-                   return(sp);
-               else
-                   found_sp = sp;
-           }
-       }
-       return(found_sp);
-}
-
-/*
- * search a symbol with file, func and line qualification
- */
-private db_sym_t
-aout_db_qualified_search(
-       db_symtab_t     *stab,
-       const char      *file,
-       const char      *sym,
-       int             line)
-{
-       struct nlist *sp = (struct nlist *)stab->start;
-       struct nlist    *ep = (struct nlist *)stab->end;
-       struct nlist    *fp = 0;
-       struct nlist    *found_sp;
-       unsigned long   func_top;
-       boolean_t       in_file;
-
-       if (file == 0 && sym == 0)
-           return(DB_SYM_NULL);
-       if (file) {
-           if ((sp = aout_db_search_name(sp, ep, file, N_TEXT, &fp)) == 0)
-               return(DB_SYM_NULL);
-       }
-       if (sym) {
-           sp = aout_db_search_name(sp, ep, sym, (line > 0)? N_FUN: 0, &fp);
-           if (sp == 0)
-               return(DB_SYM_NULL);
-       }
-       if (line > 0) {
-           if (file && !aout_db_eq_name(fp, file))
-               return(DB_SYM_NULL);
-           found_sp = 0;
-           if (sp->n_type == N_FUN) {
-               /*
-                * qualified by function name
-                *     search backward because line number entries
-                *     for the function are above it in this case.
-                */
-               func_top = sp->n_value;
-               for (sp--; sp >= (struct nlist *)stab->start; sp--) {
-                   if (sp->n_type != N_SLINE)
-                       continue;
-                   if (sp->n_value < func_top)
-                       break;
-                   if (sp->n_desc <= line) {
-                       if (found_sp == 0 || found_sp->n_desc < sp->n_desc)
-                           found_sp = sp;
-                       if (sp->n_desc == line)
-                           break;
-                   }
-               }
-               if (sp->n_type != N_SLINE || sp->n_value < func_top)
-                   return(DB_SYM_NULL);
-           } else {
-               /*
-                * qualified by only file name
-                *    search forward in this case
-                */
-               in_file = TRUE;
-               for (sp++; sp < ep; sp++) {
-                   if (sp->n_type == N_TEXT
-                       && aout_db_is_filename(sp->n_un.n_name))
-                       break;          /* enter into another file */
-                   if (sp->n_type == N_SOL) {
-                       in_file = aout_db_eq_name(sp, file);
-                       continue;
-                   }
-                   if (!in_file || sp->n_type != N_SLINE)
-                       continue;
-                   if (sp->n_desc <= line) {
-                       if (found_sp == 0 || found_sp->n_desc < sp->n_desc)
-                           found_sp = sp;
-                       if (sp->n_desc == line)
-                           break;
-                   }
-               }
-           }
-           sp = found_sp;
-       }
-       return((db_sym_t) sp);
-}
-
-/*
- * lookup symbol by name
- */
-db_sym_t
-aout_db_lookup(
-       db_symtab_t     *stab,
-       char *          symstr)
-{
-       return(db_sym_parse_and_lookup(aout_db_qualified_search, stab, symstr));
-}
-
-db_sym_t
-aout_db_search_symbol(
-       db_symtab_t *   symtab,
-       db_addr_t       off,
-       db_strategy_t   strategy,
-       db_expr_t       *diffp) /* in/out */
-{
-       unsigned long   diff = *diffp;
-       struct nlist    *symp = 0;
-       struct nlist    *sp, *ep;
-
-       sp = (struct nlist *)symtab->start;
-       ep = (struct nlist *)symtab->end;
-
-       for (; sp < ep; sp++) {
-           if (sp->n_un.n_name == 0)
-               continue;
-           if ((sp->n_type & N_STAB) != 0)
-               continue;
-           if (strategy == DB_STGY_XTRN && (sp->n_type & N_EXT) == 0)
-               continue;
-           if (off >= sp->n_value) {
-
-               unsigned int type = sp->n_type;
-
-               if (type == N_FN) continue;
-               if (off - sp->n_value < diff) {
-                   diff = off - sp->n_value;
-                   symp = sp;
-                   if (diff == 0 && (type & N_EXT))
-                       break;
-               }
-               else if (off - sp->n_value == diff) {
-                   if (symp == 0)
-                       symp = sp;
-                   else if ((symp->n_type & N_EXT) == 0 &&
-                               (type & N_EXT) != 0)
-                       symp = sp;      /* pick the external symbol */
-               }
-           }
-       }
-       if (symp == 0) {
-           *diffp = off;
-       }
-       else {
-           *diffp = diff;
-       }
-       return ((db_sym_t)symp);
-}
-
-/*
- * Return the name and value for a symbol.
- */
-void
-aout_db_symbol_values(
-       db_symtab_t     *stab,
-       db_sym_t        sym,
-       char            **namep,
-       db_expr_t       *valuep)
-{
-       struct nlist *sp;
-
-       sp = (struct nlist *)sym;
-       if (namep)
-           *namep = sp->n_un.n_name;
-       if (valuep)
-           *valuep = sp->n_value;
-}
-
-#define X_DB_MAX_DIFF  8       /* maximum allowable diff at the end of line */
-
-/*
- * search symbol by value
- */
-private boolean_t
-aout_db_search_by_addr(
-       const db_symtab_t       *stab,
-       vm_offset_t             addr,
-       char                    **file,
-       char                    **func,
-       int                     *line,
-       unsigned long           *diff)
-{
-       struct nlist    *sp;
-       struct nlist    *line_sp, *func_sp, *file_sp, *line_func;
-       vm_size_t       func_diff, line_diff;
-       boolean_t       found_line = FALSE;
-       struct          nlist *ep = (struct nlist *)stab->end;
-
-       line_sp = func_sp = file_sp = line_func = 0;
-       *file = *func = 0;
-       *line = 0;
-       func_diff = line_diff = ~0;
-       for (sp = (struct nlist *)stab->start; sp < ep; sp++) {
-           switch(sp->n_type) {
-           case N_SLINE:
-               if (sp->n_value <= addr) {
-                   if (line_sp == 0 || line_diff >= addr - sp->n_value) {
-                       if (line_func)
-                           line_func = 0;
-                       line_sp = sp;
-                       line_diff = addr - sp->n_value;
-                   }
-               }
-               if (sp->n_value >= addr && line_sp)
-                   found_line = TRUE;
-               continue;
-           case N_FUN:
-               if ((found_line || (line_sp && line_diff < X_DB_MAX_DIFF))
-                   && line_func == 0)
-                   line_func = sp;
-               continue;
-           case N_SO:
-               if (sp->n_value > addr)
-                   continue;
-               if (file_sp == 0 || file_sp->n_value <= sp->n_value)
-                   file_sp = sp;
-               continue;
-           case N_TEXT:
-               if (aout_db_is_filename(sp->n_un.n_name)) {
-                   if (sp->n_value > addr)
-                       continue;
-                   if (file_sp == 0 || file_sp->n_value <= sp->n_value)
-                       file_sp = sp;
-               } else if (sp->n_value <= addr &&
-                        (func_sp == 0 || func_diff > addr - sp->n_value)) {
-                   func_sp = sp;
-                   func_diff = addr - sp->n_value;
-               }
-               continue;
-           case N_TEXT|N_EXT:
-               if (sp->n_value <= addr &&
-                        (func_sp == 0 || func_diff >= addr - sp->n_value)) {
-                   func_sp = sp;
-                   func_diff = addr - sp->n_value;
-                   if (func_diff == 0 && file_sp && func_sp)
-                       break;
-               }
-           default:
-               continue;
-           }
-           break;
-       }
-       if (line_sp) {
-           if (line_func == 0 || func_sp == 0
-               || line_func->n_value != func_sp->n_value)
-               line_sp = 0;
-       }
-       if (file_sp) {
-           *diff = addr - file_sp->n_value;
-           *file = file_sp->n_un.n_name;
-       }
-       if (func_sp) {
-           *diff = addr - func_sp->n_value;
-           *func = (func_sp->n_un.n_name[0] == '_')?
-                       func_sp->n_un.n_name + 1: func_sp->n_un.n_name;
-       }
-       if (line_sp) {
-           *diff = addr - line_sp->n_value;
-           *line = line_sp->n_desc;
-       }
-       return(file_sp || func_sp || line_sp);
-}
-
-/*
- * Find filename and lineno within, given the current pc.
- */
-boolean_t
-aout_db_line_at_pc(
-       db_symtab_t     *stab,
-       db_sym_t        sym,
-       char            **file,
-       int             *line,
-       db_addr_t       pc)
-{
-       char            *func;
-       unsigned long   diff;
-       boolean_t       found;
-
-       found = aout_db_search_by_addr(stab, pc, file, &func, line, &diff);
-       return(found && func && *file);
-}
-
-#endif /* DB_NO_AOUT */
-
-#endif /* MACH_KDB */
diff --git a/ddb/db_aout.h b/ddb/db_aout.h
deleted file mode 100644
index 7c03d36d..00000000
--- a/ddb/db_aout.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2013 Free Software Foundation.
- *
- * 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
- * (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.
- */
-
-#ifndef _DDB_DB_AOUT_H_
-#define _DDB_DB_AOUT_H_
-
-#include <ddb/db_sym.h>
-#include <machine/db_machdep.h>
-
-extern boolean_t
-aout_db_line_at_pc(
-       db_symtab_t     *stab,
-       db_sym_t        sym,
-       char            **file,
-       int             *line,
-       db_addr_t       pc);
-
-extern db_sym_t
-aout_db_lookup(
-       db_symtab_t     *stab,
-       char *          symstr);
-
-extern db_sym_t
-aout_db_search_symbol(
-       db_symtab_t *   symtab,
-       db_addr_t       off,
-       db_strategy_t   strategy,
-       db_expr_t       *diffp);
-
-extern void
-aout_db_symbol_values(
-       db_symtab_t     *stab,
-       db_sym_t        sym,
-       char            **namep,
-       db_expr_t       *valuep);
-
-#endif /* _DDB_DB_AOUT_H_ */
diff --git a/ddb/db_sym.c b/ddb/db_sym.c
index a247b645..f0adb0c2 100644
--- a/ddb/db_sym.c
+++ b/ddb/db_sym.c
@@ -37,7 +37,6 @@
 #include <ddb/db_output.h>
 #include <ddb/db_sym.h>
 #include <ddb/db_task_thread.h>
-#include <ddb/db_aout.h>
 #include <ddb/db_elf.h>
 
 #include <vm/vm_map.h> /* vm_map_t */
@@ -513,13 +512,8 @@ static boolean_t dummy_db_sym_init(char *a, char *b, const 
char *c, char *d) {
 
 struct db_sym_switch x_db[] = {
 
-       /* BSD a.out format (really, sdb/dbx(1) symtabs) */
-#ifdef DB_NO_AOUT
+       /* BSD a.out format (really, sdb/dbx(1) symtabs) not supported */
        { 0,},
-#else  /* DB_NO_AOUT */
-       { aout_db_sym_init, aout_db_lookup, aout_db_search_symbol,
-         aout_db_line_at_pc, aout_db_symbol_values, dummy_db_free_symbol },
-#endif /* DB_NO_AOUT */
 
        { 0,},
 
diff --git a/ddb/db_sym.h b/ddb/db_sym.h
index bc8a10dd..20450f64 100644
--- a/ddb/db_sym.h
+++ b/ddb/db_sym.h
@@ -222,7 +222,7 @@ extern struct db_sym_switch {
 } x_db[];
 
 #ifndef        symtab_type
-#define        symtab_type(s)          SYMTAB_AOUT
+#define        symtab_type(s)          SYMTAB_ELF
 #endif
 
 #define        X_db_sym_init(s,e,n,t)          
x_db[symtab_type(s)].init(s,e,n,t)
@@ -238,12 +238,6 @@ extern boolean_t db_line_at_pc(
        int *linenum,
        db_addr_t pc);
 
-extern boolean_t aout_db_sym_init(
-       char *symtab,
-       char *esymtab,
-       const char *name,
-       char *task_addr);
-
 extern boolean_t elf_db_sym_init (
        unsigned shdr_num,
        vm_size_t shdr_size,
diff --git a/i386/i386at/model_dep.c b/i386/i386at/model_dep.c
index 98408c06..3a4b41a1 100644
--- a/i386/i386at/model_dep.c
+++ b/i386/i386at/model_dep.c
@@ -94,18 +94,12 @@
 #include <ddb/db_sym.h>
 #include <i386/db_interface.h>
 
-/* a.out symbol table */
-static vm_offset_t kern_sym_start, kern_sym_end;
-
 /* ELF section header */
 static unsigned elf_shdr_num;
 static vm_size_t elf_shdr_size;
 static vm_offset_t elf_shdr_addr;
 static unsigned elf_shdr_shndx;
 
-#else /* MACH_KDB */
-#define kern_sym_start 0
-#define kern_sym_end   0
 #endif /* MACH_KDB */
 
 #define RESERVED_BIOS 0x10000
@@ -522,22 +516,6 @@ void c_boot_entry(vm_offset_t bi)
         * We need to do this before i386at_init()
         * so that the symbol table's memory won't be stomped on.
         */
-       if ((boot_info.flags & MULTIBOOT_AOUT_SYMS)
-           && boot_info.shdr_addr)
-       {
-               vm_size_t symtab_size, strtab_size;
-
-                /* For simplicity we just use a simple boot_info_raw structure 
for elf */
-               kern_sym_start = (vm_offset_t)phystokv(boot_info.shdr_addr);
-               symtab_size = (vm_offset_t)phystokv(boot_info.shdr_num);
-               strtab_size = (vm_offset_t)phystokv(boot_info.shdr_size);
-               kern_sym_end = kern_sym_start + 4 + symtab_size + strtab_size;
-
-               printf("kernel symbol table at %08" PRIxPTR "-%08" PRIxPTR " 
(%ld,%ld)\n",
-                      kern_sym_start, kern_sym_end,
-                      (unsigned long) symtab_size, (unsigned long) 
strtab_size);
-       }
-
        if ((boot_info.flags & MULTIBOOT_ELF_SHDR)
            && boot_info.shdr_num)
        {
@@ -562,11 +540,6 @@ void c_boot_entry(vm_offset_t bi)
        /*
         * Initialize the kernel debugger's kernel symbol table.
         */
-       if (kern_sym_start)
-       {
-               aout_db_sym_init((char *)kern_sym_start, (char *)kern_sym_end, 
"mach", (char *)0);
-       }
-
        if (elf_shdr_num)
        {
                elf_db_sym_init(elf_shdr_num,elf_shdr_size,
-- 
2.39.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]