diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index b3c083bca1653a697e77d31770513ebce1164421..8bb2b4967bff67dec82c817ad55b08470be1a1e8 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,11 @@
+2010-02-12  Pedro Alves  <pedro@codesourcery.com>
+
+	* breakpoint.c (allocate_bp_location): Use bp_loc_other for
+	bp_tracepoint and bp_fast_tracepoint, not
+	bp_loc_software_breakpoint.
+	(update_global_location_list): Tracepoints are never duplicates of
+	anything.
+
 2010-02-12  Pedro Alves  <pedro@codesourcery.com>
 
 	* breakpoint.c (break_command_really): Change return type to int.
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 574ecdf67a08ba527aef07533094ac5b3c518844..8c97949d7dccdeef1533a3be3376361371c2d508 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -4812,8 +4812,6 @@ allocate_bp_location (struct breakpoint *bpt)
   switch (bpt->type)
     {
     case bp_breakpoint:
-    case bp_tracepoint:
-    case bp_fast_tracepoint:
     case bp_until:
     case bp_finish:
     case bp_longjmp:
@@ -4838,6 +4836,8 @@ allocate_bp_location (struct breakpoint *bpt)
       break;
     case bp_watchpoint:
     case bp_catchpoint:
+    case bp_tracepoint:
+    case bp_fast_tracepoint:
       loc->loc_type = bp_loc_other;
       break;
     default:
@@ -8575,7 +8575,8 @@ update_global_location_list (int should_insert)
 	  || b->enable_state == bp_startup_disabled
 	  || !loc->enabled
 	  || loc->shlib_disabled
-	  || !breakpoint_address_is_meaningful (b))
+	  || !breakpoint_address_is_meaningful (b)
+	  || tracepoint_type (b))
 	continue;
 
       /* Permanent breakpoint should always be inserted.  */