Changeset 525


Ignore:
Timestamp:
Aug 5, 2003, 3:15:13 AM (22 years ago)
Author:
bird
Message:

Interated with an Electric Fence Heap of mine.

Location:
trunk/src/emx/src/lib
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/emx/src/lib/libc.smak

    • Property cvs2svn:cvs-rev changed from 1.22 to 1.23
    r524 r525  
    5151LIBC.OBJS       := $.omf/src/lib/startup/386/dll0.obj $.omf/src/lib/startup/dllinit.obj
    5252LIBC.LIBS       := $.omf/c.lib $.omf/c_app.lib
    53 LIBC.DEPS       := $.omf/os2stub.bin
     53LIBC.DEPS       := $.omf/os2stub.bin $.omf/c_alias.lib
    5454LIBC.DLL.OBJS   :=
    5555LIBC.DIRS       := $(sort $(dir $(LIBC.OBJS) $(LIBC.DEPS) $(LIBC.DLL.OBJS)))
     
    6262LIBC.PRF.DIRS   := $(sort $(dir $(LIBC.PRF.OBJS) $(LIBC.PRF.DEPS)))
    6363
    64 TARGDIRS        += $(LIBC.DIRS) $(LIBC.PRF.DIRS)
     64LIBC.ELH.DLL    := $(LIBC.DLL:.dll=.elh)
     65LIBC.ELH.DEF    := $.omf/libc.elh.def
     66LIBC.ELH.OBJS   := $(LIBC.OBJS)
     67LIBC.ELH.LIBS   := $(LIBC.LIBS)
     68LIBC.ELH.DEPS   := $(LIBC.DEPS)
     69LIBC.ELH.DIRS   :=
     70                                               
     71TARGDIRS        += $(LIBC.DIRS) $(LIBC.PRF.DIRS) $(LIBC.ELH.DIRS)
    6572
    6673                       
     
    7885endif
    7986
    80 # LIBC .def file 
     87# LIBC .def file
    8188$(LIBC.DEF): $(LIBC.LIBS) src/lib/libc.def
    8289        $(call RM,$@)
     
    118125
    119126       
     127# LIBC.ELH - Electric Heap version of libcXY.dll
     128$(LIBC.ELH.DLL): $(LIBC.ELH.OBJS) $(LIBC.ELH.LIBS) $(LIBC.ELH.DEF) $(LIBC.ELH.DEPS)
     129        $(LD) -o $@ -Zomf $(subst -s,,$(LDFLAGS.DLL)) -Zmap=$@.map -nostdlib  \
     130            $(LIBC.ELH.DEF) \
     131                $(LIBC.ELH.OBJS) \
     132                $(LIBC.ELH.LIBS) \
     133                -L$.omf -los2 -lgcc -lgcc_eh -lc_alias -lend \
     134                -Zlinker -STUB:$.omf/os2stub.bin
     135        echo $@         
     136
     137# LIBC .def file (two steps)
     138# Man! This sucks! Isn't there support for inline files (<<\nfile\n<<) in GNU MAKE?
     139# Even M$/IBM nmake     have that.
     140# And no, I couldn't care less about performance with this type of DLL.
     141$(LIBC.ELH.DEF): $(LIBC.DEF) src/lib/libc.smak
     142        $(call RM,$@)
     143        cp $< $@
     144        @$(call FECHO,$@,"")
     145        @$(call FECHO,$@,"IMPORTS");
     146        @$(call FECHO,$@,"  kHeapDbgException              = KLIBDBG.kHeapDbgException")       
     147        @$(call FECHO,$@,"  __std_calloc                   = KLIBDBG._gcc__std_calloc")
     148        @$(call FECHO,$@,"  __um_default_alloc             = KLIBDBG._gcc__um_default_alloc")
     149        @$(call FECHO,$@,"  __um_default_expand            = KLIBDBG._gcc__um_default_expand")
     150        @$(call FECHO,$@,"  __um_default_release           = KLIBDBG._gcc__um_default_release")
     151        @$(call FECHO,$@,"  __um_default_shrink            = KLIBDBG._gcc__um_default_shrink")
     152        @$(call FECHO,$@,"  __std_expand                   = KLIBDBG._gcc__std_expand")
     153        @$(call FECHO,$@,"  __std_free                     = KLIBDBG._gcc__std_free")
     154        @$(call FECHO,$@,"  __heapchk                      = KLIBDBG._gcc__heapchk")
     155        @$(call FECHO,$@,"  __heapmin                      = KLIBDBG._gcc__heapmin")
     156        @$(call FECHO,$@,"  __heapset                      = KLIBDBG._gcc__heapset")
     157        @$(call FECHO,$@,"  __heap_walk                    = KLIBDBG._gcc__heap_walk")
     158        @$(call FECHO,$@,"  __um_seg_addmem                = KLIBDBG._gcc__um_seg_addmem")
     159        @$(call FECHO,$@,"  __um_seg_setmem                = KLIBDBG._gcc__um_seg_setmem")
     160        @$(call FECHO,$@,"  __um_addmem_nolock             = KLIBDBG._gcc__um_addmem_nolock")
     161        @$(call FECHO,$@,"  __um_crumb_alloc               = KLIBDBG._gcc__um_crumb_alloc")
     162        @$(call FECHO,$@,"  __um_lump_alloc                = KLIBDBG._gcc__um_lump_alloc")
     163        @$(call FECHO,$@,"  __um_alloc_no_lock             = KLIBDBG._gcc__um_alloc_no_lock")
     164        @$(call FECHO,$@,"  __um_free_maybe_lock           = KLIBDBG._gcc__um_free_maybe_lock")
     165        @$(call FECHO,$@,"  __um_crumb_free_maybe_lock     = KLIBDBG._gcc__um_crumb_free_maybe_lock")
     166        @$(call FECHO,$@,"  __um_lump_free_maybe_lock      = KLIBDBG._gcc__um_lump_free_maybe_lock")
     167        @$(call FECHO,$@,"  __um_find_bucket               = KLIBDBG._gcc__um_find_bucket")
     168        @$(call FECHO,$@,"  __um_lump_unlink_bucket        = KLIBDBG._gcc__um_lump_unlink_bucket")
     169        @$(call FECHO,$@,"  __um_lump_unlink_heap          = KLIBDBG._gcc__um_lump_unlink_heap")
     170        @$(call FECHO,$@,"  __um_lump_link_heap            = KLIBDBG._gcc__um_lump_link_heap")
     171        @$(call FECHO,$@,"  __um_lump_make_free            = KLIBDBG._gcc__um_lump_make_free")
     172        @$(call FECHO,$@,"  __um_lump_coalesce_free        = KLIBDBG._gcc__um_lump_coalesce_free")
     173        @$(call FECHO,$@,"  __um_init_default_regular_heap = KLIBDBG._gcc__um_init_default_regular_heap")
     174        @$(call FECHO,$@,"  __um_init_default_tiled_heap   = KLIBDBG._gcc__um_init_default_tiled_heap")
     175        @$(call FECHO,$@,"  __um_realloc                   = KLIBDBG._gcc__um_realloc")
     176        @$(call FECHO,$@,"  __um_walk_error                = KLIBDBG._gcc__um_walk_error")
     177        @$(call FECHO,$@,"  __um_walk_no_lock              = KLIBDBG._gcc__um_walk_no_lock")
     178        @$(call FECHO,$@,"  __std_malloc                   = KLIBDBG._gcc__std_malloc")
     179        @$(call FECHO,$@,"  __mheap                        = KLIBDBG._gcc__mheap")
     180        @$(call FECHO,$@,"  __msize                        = KLIBDBG._gcc__msize")
     181        @$(call FECHO,$@,"  __std_realloc                  = KLIBDBG._gcc__std_realloc")
     182        @$(call FECHO,$@,"  __tcalloc                      = KLIBDBG._gcc__tcalloc")
     183        @$(call FECHO,$@,"  __tfree                        = KLIBDBG._gcc__tfree")
     184        @$(call FECHO,$@,"  __theapmin                     = KLIBDBG._gcc__theapmin")
     185        @$(call FECHO,$@,"  __tmalloc                      = KLIBDBG._gcc__tmalloc")
     186        @$(call FECHO,$@,"  __trealloc                     = KLIBDBG._gcc__trealloc")
     187        @$(call FECHO,$@,"  __uaddmem                      = KLIBDBG._gcc__uaddmem")
     188        @$(call FECHO,$@,"  __ucalloc                      = KLIBDBG._gcc__ucalloc")
     189        @$(call FECHO,$@,"  __uclose                       = KLIBDBG._gcc__uclose")
     190        @$(call FECHO,$@,"  __ucreate                      = KLIBDBG._gcc__ucreate")
     191        @$(call FECHO,$@,"  __ucreate2                     = KLIBDBG._gcc__ucreate2")
     192        @$(call FECHO,$@,"  __udefault                     = KLIBDBG._gcc__udefault")
     193        @$(call FECHO,$@,"  __udestroy                     = KLIBDBG._gcc__udestroy")
     194        @$(call FECHO,$@,"  __uheapchk                     = KLIBDBG._gcc__uheapchk")
     195        @$(call FECHO,$@,"  __uheapmin                     = KLIBDBG._gcc__uheapmin")
     196        @$(call FECHO,$@,"  __uheapset                     = KLIBDBG._gcc__uheapset")
     197        @$(call FECHO,$@,"  __umalloc                      = KLIBDBG._gcc__umalloc")
     198        @$(call FECHO,$@,"  __uopen                        = KLIBDBG._gcc__uopen")
     199        @$(call FECHO,$@,"  __ustats                       = KLIBDBG._gcc__ustats")
     200        @$(call FECHO,$@,"  __utcalloc                     = KLIBDBG._gcc__utcalloc")
     201        @$(call FECHO,$@,"  __utdefault                    = KLIBDBG._gcc__utdefault")
     202        @$(call FECHO,$@,"  __utmalloc                     = KLIBDBG._gcc__utmalloc")
     203        @$(call FECHO,$@,"  __uheap_type                   = KLIBDBG._gcc__uheap_type")
     204        @$(call FECHO,$@,"  __uheap_walk                   = KLIBDBG._gcc__uheap_walk")
     205        @$(call FECHO,$@,"  __uheap_walk2                  = KLIBDBG._gcc__uheap_walk2")
     206        @$(call FECHO,$@,"  ")
     207        @$(call FECHO,$@,"  __um_regular_heap                      = KLIBDBG._gcc__um_regular_heap")
     208        @$(call FECHO,$@,"  __um_tiled_heap                = KLIBDBG._gcc__um_tiled_heap")
     209       
     210                                       
    120211# Put libc into the big picture. (semihacks)
    121212DO.HELP.MODULES += $(call ECHO,    libc-dll - The dynamic C library (.dll))$(NL)
     
    125216libc-dll: emxbind emxexp app alias libc os2 \
    126217                        $(LIBC.DIRS) $(LIBC.DLL) $(LIBC.IMPLIB) \
    127                         $(LIBC.PRF.DIRS) $(LIBC.PRF.DLL)
     218                        $(LIBC.PRF.DIRS) $(LIBC.PRF.DLL) \
     219                        $(LIBC.ELH.DIRS) $(LIBC.ELH.DLL)
    128220
    129221# Installation.
    130222INS.FILES       += $(INS)lib/$(notdir $(LIBC.DLL)) \
    131223  $(addprefix $(INS)lib/,$(notdir $(LIBC.IMPLIB))) \
    132   $(INS)lib/$(notdir $(LIBC.PRF.DLL))
     224  $(INS)lib/$(notdir $(LIBC.PRF.DLL)) \
     225  $(INS)lib/$(notdir $(LIBC.ELH.DLL))
    133226
    134227$(INS)lib/$(notdir $(LIBC.DLL)): $(LIBC.DLL)
     
    138231        $(call CP,$<,$@)
    139232
     233$(INS)lib/$(notdir $(LIBC.ELH.DLL)): $(LIBC.ELH.DLL)
     234        $(call CP,$<,$@)
     235                                               
    140236ifeq ($(MODE),opt)
    141237INS.FILES       += $(INS)lib/$(notdir $(LIBC.DLL:.dll=.dbg))
  • trunk/src/emx/src/lib/sys/__init.c

    • Property cvs2svn:cvs-rev changed from 1.4 to 1.5
    r524 r525  
    356356}
    357357
     358/* from kLib/kHeapDbg.h */
     359typedef enum { enmRead, enmWrite, enmUnknown } ENMACCESS;
     360extern BOOL _Optlink kHeapDbgException(void *    pvAccess,
     361                                       ENMACCESS enmAccess,
     362                                       void *    pvIP,
     363                                       void *    pvOS);
     364/* Weak on _Optlink and _System doesn't work because of underscoring. */
     365asm (".weak kHeapDbgException");
    358366
    359367ULONG _sys_exception (PEXCEPTIONREPORTRECORD report,
     
    379387      break;
    380388    case XCPT_ACCESS_VIOLATION:
     389      /* If we're linking libc01.elh or someone is linking static libc
     390         together with kLib the electric fence heap will get the opportunity
     391         to check if any access violation was caused by someone touching any
     392         of the electric fences. */
     393      if (    kHeapDbgException
     394          &&  (   report->ExceptionInfo[0] == XCPT_READ_ACCESS
     395               || report->ExceptionInfo[0] == XCPT_WRITE_ACCESS
     396               || report->ExceptionInfo[0] == XCPT_EXECUTE_ACCESS
     397               || report->ExceptionInfo[0] == XCPT_UNKNOWN_ACCESS)
     398          )
     399        {
     400          ENMACCESS enmAccess = enmRead;
     401          switch (report->ExceptionInfo[0])
     402          {
     403            case XCPT_WRITE_ACCESS:     enmAccess = enmWrite; break;
     404            case XCPT_UNKNOWN_ACCESS:   enmAccess = enmUnknown; break;
     405          }
     406          /* This call returns true if the page was commited in order
     407             to workaround the immediate problem. If it returns false
     408             the default action should be taken. */
     409          if (kHeapDbgException((void*)report->ExceptionInfo[1],
     410                                enmAccess,
     411                                report->ExceptionAddress,
     412                                report))
     413                  return XCPT_CONTINUE_EXECUTION;
     414        }
    381415    case XCPT_DATATYPE_MISALIGNMENT:
    382416      return _sys_trap (SIGSEGV);
Note: See TracChangeset for help on using the changeset viewer.